Septembar 2008, rešeni rok iz predmeta "Baze podataka"


fajlovi prikačeni uz rok.

U arhivi se nalaze: XML schema (.xsd), XML dokument (.xml), XQuery upit ili XPath putanja (.xq), SQl dump baze (.sql), visio 2003 dijagram (.vsd) ukoliko postoje takvi fajlovi vezani za zadatke.

XML: za sve fajlove je provereno da li su dobro oformljeni, a ako postoji i xml fajl i schema, xml fajl je validiran u odnosu na odgovarajuću šemu. Za kreiranje fajlova, proveru forme, validaciju, XPath i XQuery izraze korišćen je XML editor EditX http://www.editix.com/

SQL: baza je napravljena u MySQL-u pa prema tome SQL kod može imati netipičnu sintaksu ili funkcije različite od onih u knjizi. Upiti su provereni, prema mom shvatanju zadataka, koji često nisu baš lako shvatljivi. Najlakše je preko MySQLyog-a uraditi "restore from SQL dump" da bi mogli da probate upite nad podacima. Alati: MySQL http://www.mysql.com, MySQOyog www.webyog.com


1. zadatak

relacija:

Evrovizija (Izvodjač, ŠifraDržaveOcenjivača, BrojPoena, NazivPesme, NazivDržaveOcenjivača, ŠifraJezika, NazivJezika)

funkcionalne zavisnosti:

Izvodjač, ŠifraDržaveOcenjivača --> BrojPoena, NazivPesme, NazivDržaveOcenjivača, ŠifraJezika, NazivJezika
ŠifraDržaveOcenjivača --> NazivDržaveOcenjivača
Izvodjač --> NazivPesme, ŠifraJezika, NazivJezika
ŠifraJezika --> NazivJezika

definicije:

fukcionalna zavisnost:

u relaciji R atribut R.B (R.A i R.B mogu biti složeni) funkcionalno zavisi od atributa R.A (R.A funkcionalno određuje R.B) ako za svaku vrednost R.A postoji jedna i samo jedna vrednost R.B

potpuna funkcionalna zavisnost:

atribut R.B potpuno funkcionalno zavisi od atributa R.A ako funkcionalno zavisi od atributa R.A ali ne i od nekog pravog podskupa atributa R.A

determinanta:

determinanta je bilo koji prost ili slozen atribut od koga neki drugi atribut u relaciji potpuno funkcionalno zavisi.

determinante:

Izvodjač, ŠifraDržaveOcenjivača --> BrojPoena(D)(KK)
Izvodjač --> NazivPesme, ŠifraJezika, NazivJezika(D)
ŠifraDržaveOcenjivača --> NazivDržaveOcenjivača(D)
ŠifraJezika --> NazivJezika(D)

relacija se svodi na BCNF dekompozicijom kojom se iz relacije izvlače projekcije sa onim determinantama koje nisu kandidati za ključ

Pesma (Izvodjač, NazivPesme, ŠifraJezika)
Ocena (Izvodjač, ŠifraDržaveOcenjivača, BrojPoena)
DržavaOcenjivač (ŠifraDržaveOcenjivača, NazivDržaveOcenjivača)
Jezik (ŠifraJezika, NazivJezika)

u ovim relacijama sve determinante su kandidati za ključ tako da su relacije u Boyce-Codd normalnoj formi.


2. zadatak

a)

A (A1#, A2)

B (B1#, B2, A1#)

AB1 (B1#, A1#)

C (A1#,C1#, C2)

D (A1#, D1)

E (A1#, E1)

F (A1#, F1)

G (A1#, G1, A1#, G1)

H (A1#, A1#, A1#, G1, H1)

b)

class A (extent As key A1#){

	attribute string A1#;
	attribute string A2;
	relationship set<Bgtt; AB1 inverse B :: BA1;
	relationship set<Bgtt; AB2 inverse B :: BA2;

};

class B (extent Bs key B1#){

	attribute string B1#;
	attribute string B2;
	relationship A BA1 inverse A :: AB1;
	relationship A BA2 inverse A :: AB2;

};

class D exdends A{

	attribute string D1;
	attribute set<Ggtt; Gs;

};

class G {

	attribute string G1;
	relationship G G1G2 inverse G :: G2G1;
	relationship set<Ggtt; G2G1 inverse G :: G1G2;
	relationship set<Hgtt; GH inverse H :: HG;

};

class H {

	attribute string H1;
	relationship C HC inverse C :: CH;
	relationship F HF inverse F :: FH;
	relationship G HG inverse G :: GH;

};

3. zadatak

QBE je upitni jezik koji predstavlja implementaciju relacionog računa domena, preko specifične "dvodimenzione" sintakse, koja je vrlo bliska korisniku jer se preko nje direktno, u skeletu tabele predstavljene na ekranu, zadaje primer odgovora koji korisnik želi.

naziv relacijeatributi
operacije nad celim n-torakamaoznake promenjivih, konstanti, uslova i operacija nad atributima

operacije

uslovi koje treba da ispune atributi navode se u kolonama tog atrubuta. Ako su uslovi u istom redu, vezani su logičkim operatorom i (AND) a ako su u različitim redovima vezani su logičkim operatorm ili (OR).

Promenjiva u QBE je niz karkatera koji počinje sa _. Služi za spajanje tabela.


4. zadatak

U ODMGu postoje dve vrste nasleđivanja: nasleđivanje ponašanja i nasleđivanje stanja.


5. zadatak

Transakcija je osnovna logička jedinica posla u obradi podataka (LUW - Logical Unit of Work). Transakcija mora da poseduje tzv "ACID" osobine.


6. zadatak

a)

<?xml version="1.0" encoding="utf-8"?>
<xsd:schema
	elementFormDefault="qualified"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="
		http://www.w3.org/2001/XMLSchema
		http://www.w3.org/2001/XMLSchema.xsd">
    <xsd:element name="portfolio">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="stock">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="name" type="xsd:string"/>
                            <xsd:element name="symbol" type="xsd:string"/>
                            <xsd:element name="price">
                                <xsd:complexType>
                                    <xsd:simpleContent>
                                        <xsd:extension base="xsd:double"gtt;
                                            <xsd:attribute name="dt" type="xsd:string" use="required"/>
                                        </xsd:extension>
                                    </xsd:simpleContent>
                                </xsd:complexType>
                            </xsd:element>
                            <xsd:element name="share">
                                <xsd:complexType>
                                    <xsd:simpleContent>
                                        <xsd:extension base="xsd:integer">
                                            <xsd:attribute name="dt" type="xsd:string" use="required"/>
                                        </xsd:extension>
                                    </xsd:simpleContent>
                                </xsd:complexType>
                            </xsd:element>
                        </xsd:sequence>
                        <xsd:attribute name="excange" use="required">
                            <xsd:simpleType>
                                <xsd:restriction base="xsd:string">
                                    <xsd:enumeration value="nyse"/>
                                    <xsd:enumeration value="nasdaq"/>
                                    <xsd:enumeration value="amx"/>
                                </xsd:restriction>
                            </xsd:simpleType>
                        </xsd:attribute>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

b)

portfolio (potfolioID)
stock (portfolioID, stockID, exchange, name, symbol, price, share)

c)

for 
	$x in doc("portfolio.xml")/portfolio
where 
	$x/stock/name["zysmergy inc"]
return 
	$x

7. zadatak

a)

select
	LokacijaID
from
	Lokacija join PopisnaLista using(LokacijaID) join StavkaPopisneListe using(ListaID)
where
	TipLokacije = 'Administrativni objekti' and extract(year from DatumPopisa) = '2008'
group by
	LokacijaID
having
	sum(PopisanaKol) = 0

b)

select
	LokacijaID, Lokacija.Naziv, AmortizacionaGrupa, sum(NabavnaVrednost) as UkupnaNabavnaVrednost, sum(OtpisanaVrednost) as UkupnaOtpisanaVrednost
from
	Lokacija join PopisnaLista using(LokacijaID) join StavkaPopisneListe using(ListaID) join OsnovnoSredstvo using(InventarniBroj)
group by
	LokacijaID, Lokacija.Naziv, AmortizacionaGrupa
order by
	LokacijaID asc	

c)

select
	PredsednikKomisije, sum(NabavnaVrednost) as SumaNabavnihVrednosti, extract(year from DatumPopisa) as GodinaPopisa
from
	PopisnaKomisija join PopisnaLista  using(KomisijaID) join StavkaPopisneListe using(ListaID) join Lokacija using(LokacijaID) join OsnovnoSredstvo using(InventarniBroj)
group by
	LokacijaID, GodinaPopisa,PredsednikKomisije
having
	(SumaNabavnihVrednosti, GodinaPopisa)
	in
	(select 
		max(unutrasnja.suma), unutrasnja.GodinaPopisa
	from
		(select 
			sum(NabavnaVrednost) as suma, LokacijaID, extract(year from DatumPopisa) as GodinaPopisa
		from 
			Lokacija join PopisnaLista using(LokacijaID) join StavkaPopisneListe using(ListaID) join OsnovnoSredstvo 		using(InventarniBroj)
		where
			extract(year from DatumPopisa) in (extract(year from current_date),extract(year from current_date)-1,extract(year from current_date)-2)
		group by
			LokacijaID, extract(year from DatumPopisa)) as unutrasnja
	group by
		unutrasnja.GodinaPopisa)

8. zadatak